home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks '96 / 3D No 'doz / Source / LaunchPatch.a < prev    next >
Encoding:
Text File  |  1996-06-22  |  3.1 KB  |  143 lines  |  [TEXT/SPM ]

  1. ;
  2. ; To build, copy the file path by holding down the cmd key and clicking on the window title,
  3. ; then open the Worksheet file and type "asm '" then paste, then type a "'" and press enter.
  4. ;
  5.  
  6.         Case    On
  7.         
  8.         Import    oldLaunch:Data
  9.         Import oldGetResource:Data
  10.         Import oldDrawPicture:Data
  11.         Import oldSetTrapAddr:Data
  12.         Import    doCleanup:Data
  13.         Import    SETGLOB:Code
  14.         Import    RESETGLOB:Code
  15.         Import _MYGETRESOURCE:Code
  16.         Import    MYDRAWPICTURE:Code
  17.         
  18. _SetToolTrapAddress        OPWORD    $A647                ; <71>
  19.         
  20. MySetTrapAddr Proc Export
  21.         Move.L    D0,-(SP)
  22.         Cmp        #$A647,D1            ; SetToolTrapAddress
  23.         Bne        @DontPatch
  24.         And        #$07FF,D0
  25.         Cmp        #$1A0,D0            ; GetResource
  26.         Beq.S    @DoOverpatch
  27.         Cmp        #$0F6,D0            ; DrawPicture
  28.         Bne        @DontPatch
  29. @DoOverpatch
  30.         Move.L    (SP),D0
  31.         Move.L    A0,-(SP)            ; stack: A0.L, D0.L
  32.         Pea        @DoOverpatchRtn
  33.         Subq    #4,SP
  34.         Link    A6,#0                ; A6: A6.L, ?.L, A0.L, D0.L
  35.         Movem.L    D0-D2/A0-A1,-(SP)
  36.         Jsr        SETGLOB
  37.         Move.L    oldSetTrapAddr(A5),4(A6)
  38.         Jsr        RESETGLOB
  39.         Movem.L    (SP)+,D0-D2/A0-A1
  40.         Unlk    A6
  41.         Rts
  42. @DoOverpatchRtn
  43.                                     ; stack has Addr.L, trap.L
  44.         Move.L    D0,-(SP)            ; save D0 on stack (D0.L, Addr.L, trap.L)
  45.         Move.L    8(SP),D0            ; get old trap number
  46.         And        #$07FF,D0
  47.         Cmp        #$1A0,D0            ; GetResource
  48.         Bne.S    @1
  49.         Lea        @PtchSets,A0
  50.         Tst.B    (A0)
  51.         Bne.S    @10
  52.         St        (A0)
  53.         Link    A6,#0                ; A6: A6.L, D0.L, A0.L, D0.L
  54.         Movem.L    D0-D2/A1,-(SP)
  55.         Jsr        SETGLOB
  56.         Move.L    8(A6),oldGetResource(A5)    ; save oldGetResource
  57.         Jsr        RESETGLOB
  58.         Movem.L    (SP)+,D0-D2/A1
  59.         Unlk    A6
  60.         Import MyGetResource:Code
  61.         Lea        MyGetResource,A0
  62.         Bra.S    @10
  63. @1        Cmp        #$0F6,D0            ; DrawPicture
  64.         Bne.S    @2
  65.         Lea        @PtchSets+1,A0
  66.         Tst.B    (A0)
  67.         Bne.S    @10
  68.         St        (A0)
  69.         Link    A6,#0                ; A6: A6.L, D0.L, A0.L, D0.L
  70.         Movem.L    D0-D2/A1,-(SP)
  71.         Jsr        SETGLOB
  72.         Move.L    8(A6),oldDrawPicture(A5)    ; save oldDrawPicture
  73.         Jsr        RESETGLOB
  74.         Movem.L    (SP)+,D0-D2/A1
  75.         Unlk    A6
  76.         Lea        MYDRAWPICTURE,A0
  77. @10
  78.         Pea        @DoOverpatchRtn2
  79.         Subq    #4,SP
  80.         Link    A6,#0
  81.         Movem.L    D0-D2/A0-A1,-(SP)
  82.         Jsr        SETGLOB
  83.         Move.L    oldSetTrapAddr(A5),4(A6)
  84.         Jsr        RESETGLOB
  85.         Movem.L    (SP)+,D0-D2/A0-A1
  86.         Unlk    A6
  87.         Move    #$A647,D1            ; SetToolTrapAddress
  88.         Rts
  89. @DoOverpatchRtn2
  90.         
  91. @2
  92.         Move.L    (SP)+,D0            ; get the D0 result from the original patch
  93.         Addq    #8,SP
  94.         Rts
  95.  
  96. @PtchSets
  97.         DC.B    0,0
  98.  
  99. @DontPatch
  100.         Move.L    (SP),D0
  101.         Link    A6,#0
  102.         Movem.L    D0-D2/A0-A1,-(SP)
  103.         Jsr        SETGLOB
  104.         Move.L    oldSetTrapAddr(A5),4(A6)
  105.         Jsr        RESETGLOB
  106.         Movem.L    (SP)+,D0-D2/A0-A1
  107.         Unlk    A6
  108.         Rts                            ; jump to old SetTrapAddress
  109.         Endp
  110.         
  111. MyGetResource Proc Export
  112.         Subq    #4,SP                ; stack has: ?.L, retAddr.L, id.W, type.L
  113.         Link    A6,#0                ; A6 frame: A6.L, ?.L, rA.L, id.W, type.L
  114.         Movem.L    D0-D2/A0-A1,-(SP)
  115.         Jsr        SETGLOB
  116.         Move.L    oldGetResource(A5),4(A6)
  117.         
  118.         Move.L    14(A6),-(SP)        ; put the type on the stack
  119.         Move    12(A6),-(SP)        ; put the id on the stack
  120.         Jsr        _MYGETRESOURCE
  121.         
  122.         Jsr        RESETGLOB
  123.         Movem.L    (SP)+,D0-D2/A0-A1
  124.         Unlk    A6
  125.         Rts
  126.         Endp
  127.         
  128. MyLaunch Proc Export
  129.         DC.W    $A9FF
  130.         Subq    #4,SP
  131.         Link    A6,#0                ; stack has: A6.L, ?.L, retAddr.L
  132.         Movem.L    D0-D2/A0-A1,-(SP)
  133.         Jsr        SETGLOB
  134.         Move.L    oldLaunch(A5),4(A6)
  135.         St        doCleanup(A5)
  136.         Jsr        RESETGLOB
  137.         Movem.L    (SP)+,D0-D2/A0-A1
  138.         Unlk    A6
  139.         Rts                            ; jump to old Launch trap
  140.         Endp
  141.         
  142.         End
  143.